/**
 * 
 */
package edu.gatech.oad.mule.view.interfaces;

/**
 * Provides methods necessary to obtain adequate information to render one frame
 * of a game of Mule.
 * 
 * @author Dale Avery
 * 
 */
public interface RenderableGameDriver {

	/**
	 * Retrieves an array of all of the renderable players in the game.
	 * @return A list of renderable players.
	 */
	public RenderablePlayer[] getAllPlayers();

	/**
	 * Retrieves the currently open map. Used in LAND_GRANT and DEVELOPMENT
	 * phases to retrieve necessary data for rendering the map.
	 * 
	 * @return The renderable interface to the currently open map.
	 */
	public RenderableMap getCurrentMap();
	
	/**
	 * Retrieves the Player for the current phase. Used for the DEVELOPMENT
	 * phase, in which only one player should be rendered at a time.
	 * 
	 * @return The renderable interface to the currently active Player.
	 */
	public RenderablePlayer getCurrentPlayer();
	
	/**
	 * @return A list of players sorted from last to first place.
	 */
	public RenderablePlayer[] getRankedPlayers();
	
	/**
	 * @return The remaining time in the current turn, in milliseconds.
	 */
	public int getRemainingTime();
	
	/**
	 * @return The length of the current turn, in milliseconds.
	 */
	public int getTurnLength();
	
	/**
	 * @return The currently selected tile (land grant phase).
	 */
	public RenderableTile getCurrentTile();
}
